public class A如何判断一个自然数是否是某个数的二次方 {

    /**
     * 设计一个算法，判断给定的一个数n 是否是某个数的二次方，不能使用平方根运算。
     * 例如，16就满足条件，因为它是4的二次方；而15则不满足条件，
     * 因为不存在一个数其二次方值为15
     */

    /**
     * 与方法一类似，这种方法的主要思路还是查找从1～n的数字中，是否存在一个数m，此m 的二次方为n。
     * 只不过在查找的过程中使用的是二分查找的方法。具体思路为：首先判断mid=（1+n）/2的二次方power与m的大小；
     * 如果power＞m，那么就说明要在[1，mid-1]区间继续查找；否则就在[mid+1，n]区间继续查找
     * @param n
     * @return
     */
    public static boolean isPower(int n){
        int low=1;
        int high=n;
        int mid;
        int power;
        while (low < high) {
            mid=(low+high)/2;
            power=mid*mid;
            //接着在1~mid-1区间查找
            if (power > n) {
                high=mid-1;
            } else if (power < n) {
                low=mid+1;
            }else {
                return true;
            }
        }
        return false;
    }
}
